package com.zm.zmgz.utils;

import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
import java.util.UUID;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: cjw
 * @Date: 2020/05/25/14:56
 * @Description:文件相关工具类
 */
@Component
public class FileUtils {

//    @Autowired
//    ConfigureBean configureBean; // 获取配置文件自定义属性

    /***
     * @Description: 文件上传, 按照年月日文件类型创建文件夹目录并存放.返回url
     * 判断name是否存在
     * 存在旧文件名即为name,不存在从file中获取旧文件名
     * @Param: b:是否使用随机文件名
     * @return:
     * @Author: cjw
     * @Date: 2020-06-15 07:32:24
     */
    public static String upfile(MultipartFile file, String name, Boolean b,HttpServletRequest request) {

        // 旧文件名
        String oldname = "";
        // 判断name是否存在;存在旧文件名即为name,不存在从file中获取旧文件名
        if (Objects.isNull(name)) {
            oldname = file.getOriginalFilename();
        } else {
            oldname = name;
        }
        System.out.println("旧名字:" + oldname);
        // 32位uuid+尾缀
        String newname = "";
        if(b)
             newname = UUID.randomUUID().toString() + oldname.substring(oldname.lastIndexOf("."));
        else
            newname = oldname;


        System.out.println("新文件名:" + newname);
        //  文件目录
        String fileType = oldname.substring(oldname.lastIndexOf(".") + 1);
        System.out.println("文件类型:" + fileType);
        String filepath = request.getServletContext().getRealPath("/" + oldname.substring(oldname.lastIndexOf(".") + 1));
//        SimpleDateFormat format = new SimpleDateFormat("/yyyy/MM/dd/");
        SimpleDateFormat format = new SimpleDateFormat("/yyyy/MM/");
        String date = format.format(new Date());
        filepath += date;
        System.out.println("存储路径:" + filepath);
        //  创建新文件
        File newfile = new File(filepath + newname);
        if (!newfile.exists()) {
            newfile.mkdirs();
        }
        System.out.println("新文件:" + newfile.getAbsolutePath());
        //  保存文件
        try {
            file.transferTo(newfile);
            String url = request.getScheme() + "://" + ConfigureBean.getServerAddress() + ":" + ConfigureBean.getServerPort() + "/" + fileType + date + newname;
            System.out.println("url:" + url);
            return url;
        } catch (IOException e) {
            e.printStackTrace();
        }
        //        返回url
        return null;
    }

    /***
    * @Description: 获取文件类型(一段字符串,最后一个.的后面部分)
    * @Param:
    * @return:
    * @Author: cjw
    * @Date: 2020-06-15 14:15:22
    */
    public static String getFileTypeByString(String s){
        String fileType = s.substring(s.lastIndexOf(".") + 1);
        return fileType;
    }


    /***
     * @Description: 通过url拼接出绝对地址,将图片从服务器中删除
     * @Param:
     * @return:
     * @Author: cjw
     * @Date: 2020-04-22 17:42:03
     */
    public static boolean deleteFileByUrlAndRequest(HttpServletRequest request, String url) {
        // 通过url,服务器环境绝对地址;拼接出该图片在服务器的绝对地址,将之删除
        // url(http://localhost:8082/img/2020/06/09/d70af2f7-c188-476d-b52c-7df6de502f69.jpg)
        System.err.println("要删除的url:" + url);
        // 获取服务端绝对地址+/img(C:\Users\Administrator\AppData\Local\Temp\tomcat-docbase.8414520335987531999.8082\img)
        // 获取文件类型
        String type = getFileTypeByString(url);
        String filepath = request.getServletContext().getRealPath("/" + type);
        System.err.println("删除文件的路径:"+filepath);
        String[] imgs = url.split(type);
        // C:\Users\Administrator\AppData\Local\Temp\tomcat-docbase.8414520335987531999.8082\img/2020/06/09/d70af2f7-c188-476d-b52c-7df6de502f69.jpg
        String filePath = filepath + imgs[1] + type;
        System.err.println("删除文件的全路径:"+filePath);
        boolean b = FileUtils.deleteFileByfile(new File(filePath));
        System.err.println("文件删除:"+b);
        return b;
    }

    /***
     * @Description: 删除传入文件
     * @Param:
     * @return:
     * @Author: cjw
     * @Date: 2020-05-25 15:01:33
     */
    public static boolean deleteFileByfile(File file) {
        if (file.exists()) {
            return file.delete();
        }
        return false;
    }



    /***
    * @Description: 根据url获取文件名
    * @Param:
    * @return:
    * @Author: cjw
    * @Date: 2020-06-15 21:23:03
    */
    public static String getFileNameByUrl(String filename) {
        String filename2 = filename.substring(filename.lastIndexOf("/") + 1);
        return filename2;
    }
}
